home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / ABUSESRC.ZIP / AbuseSrc / abuse / src / net / unix / gserver.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-14  |  2.2 KB  |  76 lines

  1. #ifndef __GSERVER_HPP_
  2. #define __GSERVER_HPP_
  3.  
  4. #define MAX_JOINERS 32  // maximum clients that can join at the same time
  5.  
  6. #include "sock.hpp"
  7. #include "ghandler.hpp"
  8.  
  9. class game_server : public game_handler
  10. {
  11.   class player_client
  12.   {
  13.     unsigned char flags;
  14.     enum { Has_joined=1,
  15.        Wait_reload=2,
  16.        Wait_input=4,
  17.        Need_reload_start_ok=8,
  18.        Delete_me=16 };
  19.     int get_flag(int flag)         { return flags&flag; }
  20.     void set_flag(int flag, int x) { if (x) flags|=flag; else flags&=~flag; }
  21.  
  22.     public :
  23.     int has_joined() { return get_flag(Has_joined); }
  24.     void set_has_joined(int x) { set_flag(Has_joined,x); }
  25.  
  26.     int wait_input() { return get_flag(Wait_input); }
  27.     void set_wait_input(int x) { set_flag(Wait_input,x); }
  28.  
  29.     int wait_reload() { return get_flag(Wait_reload); }
  30.     void set_wait_reload(int x) { set_flag(Wait_reload,x); }
  31.  
  32.     int delete_me() { return get_flag(Delete_me); }
  33.     void set_delete_me(int x) { set_flag(Delete_me,x); }
  34.  
  35.     int need_reload_start_ok() { return get_flag(Need_reload_start_ok); }
  36.     void set_need_reload_start_ok(int x) { set_flag(Need_reload_start_ok,x); }
  37.  
  38.     net_socket *comm;
  39.     int client_id; 
  40.     net_address *data_address;
  41.     player_client *next;
  42.     player_client(int client_id, net_socket *comm, net_address *data_address, player_client *next) : 
  43.       client_id(client_id), comm(comm), data_address(data_address), next(next) 
  44.       { 
  45.     flags=0;
  46.     set_wait_input(1);
  47.     comm->read_selectable(); 
  48.       };
  49.     ~player_client();
  50.   } ;
  51.  
  52.   player_client *player_list;
  53.   int waiting_server_input, reload_state;
  54.  
  55.   void add_client_input(char *buf, int size, player_client *c);
  56.   void check_collection_complete();
  57.   void check_reload_wait();
  58.   int process_client_command(player_client *c);
  59.   int isa_client(int client_id);
  60.   public :
  61.   virtual void game_start_wait();
  62.   int total_players();
  63.   int process_net();
  64.   void add_engine_input();
  65.   int input_missing();
  66.   virtual int start_reload();
  67.   virtual int end_reload(int disconnect=0);
  68.   virtual int add_client(int type, net_socket *sock, net_address *from);
  69.   virtual int kill_slackers();
  70.   virtual int quit();
  71.   game_server();
  72.   ~game_server();
  73. } ;
  74.  
  75. #endif
  76.